package thread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-04-24
 * Time: 8:39
 */
public class TestDemo9 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            while (!Thread.currentThread().isInterrupted()){ // isInterrupted()方法默认返回的false
                System.out.println("hello Thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    // 当触发异常后立即退出循环
                    System.out.println("进行收尾工作");
                    break;
                }
            }
        });
        t.start();

        try {
            // main 线程休眠5秒
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        /**
         *  在 main 线程中调用 interrupt 方法，来中断线程
         *  t.interrupt：让 t 线程被中断
         *  调用 interrupt 方法可能会产生两种情况：
         *  1) 如果 t 线程处在就绪状态，就设置线程的标志位为 true
         *  2)如果 t 线程处在阻塞状态(sleep 休眠了)，就会触发 InterruptException 异常，但是线程并没有被彻底中断（只是回应了一下，就没有后续了）
         *      解决方法：
         *                      1）直接加一个break，出现异常后直接中断 （放下游戏，立刻去做）
         *                      2）进行收尾工作，再加一个break（打完这把游戏再去做其他事）
         */

        // 使用 interrupt 方法修改线程标志位，使线程中断
        t.interrupt();
    }
}
















